package com.pkche.core.advanced.form;

import java.util.List;

/**
 * 
 * <h6>用于生成HTML标签中的select控件</h6>
 *
 * User: Qiang <br/>
 * Describe： <br/>
 *
 * @date 2015年3月5日 上午8:30:51
 */
public class HTMLSelectTag<E> {
	private StringBuilder sb;
	private List<E> resultList;

	/**
	 * 构造方法
	 * 
	 * @param list
	 *            数据List
	 * @param name
	 *            标签名称
	 * @param cssClass
	 *            css样式名称
	 * @param changeJsEvent
	 *            值被修改后，触发的js方法名
	 */
	public HTMLSelectTag(List<E> list, String name, String cssClass,
			String changeJsEvent) {
		init(list, name, cssClass, changeJsEvent);
	}

	// 初始化方法
	private void init(List<E> list, String name, String cssClass,
			String changeJsEvent) {
		sb = new StringBuilder();
		resultList = list;
		sb.append("<select");
		if (name != null) {
			sb.append(" name=\"");
			sb.append(name);
			sb.append("\"");
		}
		if (cssClass != null) {
			sb.append(" class=\"");
			sb.append(cssClass);
			sb.append("\"");
		}
		if (changeJsEvent != null) {
			sb.append(" onChange=\"");
			sb.append(changeJsEvent);
			sb.append("(this);\"");
		}
		sb.append(">");
	}

	/**
	 * 构造方法
	 * 
	 * @param list
	 *            值list
	 * @param name
	 *            域名称
	 */
	public HTMLSelectTag(List<E> list, String name) {
		this(list, name, null, null);
	}

	/**
	 * 返回标签字符串
	 * 
	 * @param valueFields
	 *            值字段名
	 * @param textFields
	 *            字符串字段名
	 * @param defaultValue
	 *            缺省的值
	 * @return
	 */
	public String tag(String valueFields, String textFields, Object defaultValue) {
		sb.append("<option value=\"" + defaultValue
				+ "\">---Please Select--</option>");
		for (Object e : resultList) {
			Swap swap = new Swap(e);
			sb.append("<option value=\"");
			sb.append(swap.getter(valueFields));
			sb.append("\">");
			sb.append(swap.getter(textFields));
			sb.append("</option>");
			sb.append("\r\n");
		}
		sb.append("</select>");
		return sb.toString();
	}

	/**
	 * 
	 * @param valueFields
	 *            值字段名
	 * @param textFields
	 *            字符串字段名
	 * @param selectedValue
	 *            选中的值
	 * @param defaultValue
	 *            缺省的值
	 * @return
	 */
	public String tag(String valueFields, String textFields,
			Object selectedValue, Object defaultValue) {
		sb.append("<option value=\"" + defaultValue
				+ "\">---Please Select--</option>");
		for (Object e : resultList) {
			Swap swap = new Swap(e);
			Object value = swap.getter(valueFields);
			sb.append("<option value=\"");
			sb.append(value);
			sb.append("\"");
			// System.out.println(selectedValue + "," + value + ","
			// + selectedValue.equals(value));
			if (selectedValue != null) {
				if (selectedValue.equals(value)) {
					sb.append(" selected");
				}
			}
			sb.append(">");
			sb.append(swap.getter(textFields));
			sb.append("</option>");
			sb.append("\r\n");
		}
		sb.append("</select>");
		// System.out.println(selectedValue);
		// System.out.println(sb.toString());
		return sb.toString();
	}
}